"""
人狗大战
人类（Person类）：
属性：姓名（name）和健康值（health）
方法：
kick_dog(dog):踢狗的方法，接受一个狗对象作为参数。在踢狗时输出狗的信息，同时减少狗对象的健康值
decrease_health(amount):减少健康值的方法，接受一个数值mount作为参数，将人的健康值减少该数值。

狗类(Dog类):
属性：姓名（name）和健康值（health）
方法：
bite(person):咬人的方法，接受一个人对象作为参数，在咬人时输出咬人的信息，同时减少人对象的健康值。
decrease_health(amount):减少健康值的方法，接受一个数值mount作为参数，将狗的健康值减少该数值。

操作：
人踢狗时，输出踢狗的信息，并减少狗的健康值。
狗咬人时，输出咬人的信息，并减少人的健康值。
最后，输出人和狗的健康值，并验证掉血值的效果。
"""


class Animal(object):
    def __init__(self, name):
        self.name = name  # 姓名
        self.health = 100  # 健康值

    def decrease_health(self, amount):
        self.health = amount
        print(f"{self.name}修改后的健康值为{self.health}")


class Person(Animal):
    a_type = "person"

    def __init__(self, name):
        super(Person, self).__init__(name)
        self.attack_val = 10

    def kick_dog(self, dog_obj):
        dog_obj.health -= self.attack_val  # 人踢狗
        print(f"狗[{dog_obj.name}]被人[{self.name}]踢了一下，掉血值[{self.attack_val}]，健康值剩下[{dog_obj.health}]")


class Dog(Animal):
    a_type = "dog"

    def __init__(self, name):
        super(Dog, self).__init__(name)
        self.attack_val = 15

    def bite(self, person_obj):
        person_obj.health -= self.attack_val
        print(
            f"人[{person_obj.name}]被狗[{self.name}]咬了一下，掉血值[{self.attack_val}]，健康值剩下[{person_obj.health}]")


if __name__ == "__main__":
    alex = Person("Alex")
    dog_dubin = Dog("杜宾")
    alex.kick_dog(dog_dubin)
    dog_dubin.bite(alex)
    alex.decrease_health(50)
    dog_dubin.decrease_health(60)
